import updateVnode from './updateVnode'
/**
 * 
 * @param {object} oldVnode 
 * @param {object} newVnode 
 * @returns 
 */
export default function patchVnode(oldVnode,newVnode){
    if(oldVnode===newVnode) return // 判断新旧节点是否指向内存中的同一个地址 如果是，直接什么也不做
        
        if(newVnode.text !== undefined && (newVnode.children === undefined || newVnode.children.length === 0)){ // 判断新节点中是否有text属性 以及新节点是不是没有children
            if(oldVnode.text!==newVnode.text){ // 判断新节点中的text属性和旧节点中的text属性是否相等，如果相等啥也不做
                oldVnode.elm.innerText = newVnode.text // 如果不等，将旧节点中的elm属性中的innerText替换成新节点的text
            }
        }else{ // 如果新节点中含有children属性
            if(oldVnode.children !== undefined && oldVnode.children.length > 0){ // 判断旧节点中是否有children属性
                // debugger
                updateVnode(oldVnode.elm, oldVnode.children, newVnode.children)

                
            }else{ 
                // 清空老节点
                oldVnode.elm.innerHTML = ''
                //
                for(let i = 0; i < newVnode.children.length; i++){
                    const newElm = createElement(newVnode.children[i])
                    oldVnode.elm.appendChild(newElm)
                }
            }
        }
}